home *** CD-ROM | disk | FTP | other *** search
- Three ways to convert a string to uppercase (without international support).
-
- {$R-,S-,I- }
-
- Procedure UpCaseStr0(Var s : String);
-
- Var
- i : Integer;
-
- Begin
- For i := 1 to Length(s) Do
- s[i] := UpCase(s[i]);
- end; { UpCaseStr0 }
-
- Procedure UpCaseStr1(Var s : String);
-
- Var
- i, len : Integer;
-
- Begin
- i := 0;
- len := Ord(s[0]);
- Repeat
- Inc(i);
- If i > len Then
- Break;
- If s[i] in ['a'..'z'] Then
- Dec(s[i], 32);
- Until False;
- end; { UpCaseStr1 }
-
- Procedure UpCaseStr2(Var s : String); Assembler;
-
- ASM
- PUSH DS
- LDS SI, s
- LES DI, s
- CLD
- XOR AH, AH
- LODSB
- STOSB
- XCHG AX, CX
- JCXZ @2
- @1: LODSB
- SUB AL, 'a'
- CMP AL, 'z'-'a'+1
- SBB AH, AH
- AND AH, 'a'-'A'
- SUB AL, AH
- ADD AL, 'a'
- STOSB
- LOOP @1
- @2: POP DS
- end; { UpCaseStr2 }
-
-
- Procedure Size Execution timing*
- (bytes) (seconds)
-
- UpCaseStr0 76 4.32 = 1.00
- UpCaseStr1 67 2.76 = 0.63
- UpCaseStr2 39 1.31 = 0.30
-
- *30,000 times on a 40 MHz 386
-
- Wilbert
-
- --- GEcho 1.00/beta
- * Origin: Charge of the Light Bregade (2:281/256.14)